package com.sxj.corejava.code08_常用类.包装类;

/**
 * @author 石小俊
 */
public class Test01 {

    public static void main(String[] args) {
        // 对于八种基本数据类型,它们不符合面向对象的特征
        // 构造方法的方式已经弃用
        int i = 1;
        // 每一个包装类都提供有对应的静态方法valueOf可以将对应基本数据类型的值转换成包装类型
        Integer i1 = Integer.valueOf(i);
        System.out.println(i1);

        byte b = 1;
        Byte b1 = Byte.valueOf(b);
        System.out.println(b1);

        short s = 1;
        Short s1 = Short.valueOf(s);
        System.out.println(s1);
        long l = 1L;
        Long l1 = Long.valueOf(l);
        System.out.println(l1);

        float f = 3.14f;
        Float f1 = Float.valueOf(f);
        System.out.println(f1);

        double d = 3.14;
        Double d1 = Double.valueOf(d);
        System.out.println(d1);

        char c = 'a';
        Character c1 = Character.valueOf(c);
        System.out.println(c1);

        boolean flag = true;
        Boolean flag1 = Boolean.valueOf(flag);
        System.out.println(flag1);

        Integer i2 = Integer.valueOf("1000");
        Integer i3 = Integer.valueOf(1000);
        System.out.println(i2 == i3);   // true

        Integer i4 = Integer.valueOf("1000");
        Integer i5 = Integer.valueOf(1000);
        System.out.println(i4 == i5);   // false

        // 上述两种情况除了值不一样以外,其他都一致,但是其结果不同
        // 原因在于根据值的大小会选择数据的创建方式
        // i >= IntegerCache.low && i <= IntegerCache.high
        // 当参数值的范围在[-128,127]之间时,没有创建对象,而是直接从缓存中获取的数据
        // 当超出范围之后通过return new Integer(i);
        // 只要new了,就说明在堆中开辟了新的空间,因此其地址值一定不等

        // 包装类是为了使得8种基本数据类型能够拥有面向对象的特征
        System.out.println(i5.toString());
        System.out.println(i5.getClass());
        System.out.println(i5.hashCode());
        System.out.println(b1.toString());


    }

}
